import yfinance as yf
ticker = ["HG=F"]
data = yf.download(ticker, start="2023-01-01", end="2023-04-01", interval="1h")
[*********************100%***********************] 1 of 1 completed
HG=F = copper futures
data["hour"] = data.index.hour
data["Deltacloseper"] = round((data.Close - data.Close.shift(1)) / data.Close.shift(1) * 100,2)
data
| Open | High | Low | Close | Adj Close | Volume | hour | Deltacloseper | |
|---|---|---|---|---|---|---|---|---|
| Datetime | ||||||||
| 2023-01-02 18:00:00-05:00 | 3.8355 | 3.8485 | 3.8305 | 3.8400 | 3.8400 | 1125 | 18 | NaN |
| 2023-01-02 19:00:00-05:00 | 3.8400 | 3.8495 | 3.8395 | 3.8460 | 3.8460 | 1004 | 19 | 0.16 |
| 2023-01-02 20:00:00-05:00 | 3.8465 | 3.8495 | 3.7925 | 3.8130 | 3.8130 | 8193 | 20 | -0.86 |
| 2023-01-02 21:00:00-05:00 | 3.8135 | 3.8570 | 3.8120 | 3.8535 | 3.8535 | 3812 | 21 | 1.06 |
| 2023-01-02 22:00:00-05:00 | 3.8535 | 3.8655 | 3.8520 | 3.8620 | 3.8620 | 1780 | 22 | 0.22 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2023-03-31 12:00:00-04:00 | 4.0900 | 4.1005 | 4.0870 | 4.0935 | 4.0935 | 10309 | 12 | 0.07 |
| 2023-03-31 13:00:00-04:00 | 4.0930 | 4.0955 | 4.0820 | 4.0850 | 4.0850 | 2021 | 13 | -0.21 |
| 2023-03-31 14:00:00-04:00 | 4.0850 | 4.0890 | 4.0810 | 4.0820 | 4.0820 | 421 | 14 | -0.07 |
| 2023-03-31 15:00:00-04:00 | 4.0820 | 4.0885 | 4.0805 | 4.0825 | 4.0825 | 724 | 15 | 0.01 |
| 2023-03-31 16:00:00-04:00 | 4.0825 | 4.0840 | 4.0800 | 4.0835 | 4.0835 | 481 | 16 | 0.02 |
1448 rows × 8 columns
hours = []
for hour in range(0,24):
hours.append(hour)
hours
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
seasonality_intraday = []
for hour in hours:
seasonality_intraday.append(data[(data.hour == hour)].Deltacloseper.mean())
seasonality_intraday
[0.010158730158730155, 0.002063492063492062, -0.035079365079365085, 0.006666666666666669, 0.06809523809523811, -0.05825396825396827, -0.05047619047619048, 0.02158730158730159, 0.014603174603174604, 0.055079365079365075, -0.003968253968253958, -0.025079365079365076, 0.07777777777777778, -0.024761904761904756, 0.04317460317460318, 0.0217741935483871, -0.004193548387096775, 0.0, 0.03435483870967741, 0.001269841269841271, -0.013174603174603176, -0.003174603174603174, -0.026349206349206348, -0.00492063492063492]
import plotly.express as px
fig = px.line(seasonality_intraday)
fig.update_layout(title = "Intra-day Seasonality",xaxis_title = "Hour",height=600,width=1000)
fig.show()